package p_cglib;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

/**
 * Cglib子类代理工厂
 * (对UserDao 在内存中动态构建一个子类对象)
 * @author Alex
 */
public  class UserDaoProxy implements MethodInterceptor {
	//维护接受保存目标对象
	private Object target;
	public UserDaoProxy(Object target){
		this.target=target;
	}	
	//给你表对象创建代理对象
	public Object getProxyInstance(){
		//工具类
		Enhancer enhancer=new Enhancer();
		//设置父类
		enhancer.setSuperclass(target.getClass());
		//设置回调函数
		enhancer.setCallback(this);
		//创建子对象（代理对象）
		return enhancer.create();	
	}
	@Override
	public Object intercept(Object object, Method method, Object[] args, MethodProxy proxy) throws Throwable {
       
		System.out.println("开始事务.....");
		
		// 执行目标对象的方法
		Object returnValue = method.invoke(target, args);
		
		System.out.println("提交事务.....");
		
		return returnValue;
	}
}
